ARP属于链路层还是网络层,https://www.zhihu.com/question/27668104

连MAC都不知道的算第1层,例如已经死绝了的hub只知道MAC不知道IP的算第2层,例如普通交换机只知道IP不知道port(也就不管TCP还是UDP)的算第3层,例如普通路由器知道IP还知道port的算第4层,例如 NAT关心payload的算第7层,例如 http proxy

作者:陈硕

如果要在TCP/IP协议栈中选择一个”最不安全的协议”,那么我会毫不犹豫把票投给ARP协议。我们经常听到的这些术语,包括”网络扫描”、”内网渗透”、”中间人拦截”、”局域网流控”、”流量欺骗”,基本都跟ARP脱不了干系。大量的安全工具,例如大名鼎鼎的Cain、功能完备的Ettercap、操作傻瓜式的P2P终结者,底层都要基于ARP实现。

当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据 48 bit的以
太网地址来确定目的接口的。设备驱动程序从不检查IP数据报中的目的IP地址。
地址解析为这两种不同的地址形式提供映射: 32 bit的IP

ARP是解决统一局域网上的主机路由器的IP地址和硬件地址的映射问题。
每一个主机都设有一个ARP高速缓存,里面有本局网上的各主机和路由器的IP地址到硬件地址的映射表
当主机A要向本局域网上的某个主机B的IP地址发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址,如果有,就在ARP高速缓存器中查找出其对应的硬件地址,再把这个硬件地址写入mac帧中,然后通过局域网把mac帧发往此硬件地址,否则主机A就自动运行ARP,然后按以下步骤找出主机B的硬件地址:
(1)ARP进程在本局网上广播发送一个ARP请求分组。
(2)在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组。
(3)主机B的IP地址与ARP请求分组中要查询的IP地址一致就收下这个ARP请求分组,并向主机A发送ARP响应分组,并在这个ARP响应分组中写如自己的硬件地址。
(4)主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。

1
2
3
4
5
6
# 我的GPU虚机,为什么只缓存了两条记录?
$ arp -v
Address HWtype HWaddress Flags Mask Iface
192.168.4.2 ether fa:16:3e:45:99:f4 C eth0
192.168.4.1 ether fa:16:3e:e1:79:74 C eth0
Entries: 2 Skipped: 0 Found: 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# -v参数显示环回接口
C:\Users\ADMIN>arp -a -v

接口: 127.0.0.1 --- 0x1 # 环回接口,虚拟网卡。并不表示“本机”
Internet 地址 物理地址 类型
224.0.0.22 静态 #
224.0.0.251 静态
239.255.255.250 静态

接口: 9.186.102.45 --- 0xc # 以太网适配器。连接特定的DNS后缀: crl.ibm.com
Internet 地址 物理地址 类型
9.186.102.1 00-00-0c-07-ac-52 动态 # 网关。动态说明可以改变。手工绑定之后,就不会受ARP攻击的影响了
9.186.102.3 e8-ba-70-42-96-c0 动态 # 后面这些是干嘛的,
9.186.102.4 e8-ba-70-42-89-c0 动态
9.186.102.100 d4-81-d7-8b-4d-31 动态
9.186.102.108 44-37-e6-c3-a4-b9 动态 # 我曾经远程桌面连接过的服务器
9.186.102.154 00-21-86-f1-47-ae 动态
9.186.102.176 3c-97-0e-b6-5c-56 动态
9.186.102.255 ff-ff-ff-ff-ff-ff 静态 # ff:ff:ff:ff:ff:ff是广播地址。
224.0.0.22 01-00-5e-00-00-16 静态 # 01:00:5e:xx:xx:xx是IPv4多播地址
224.0.0.251 01-00-5e-00-00-fb 静态 # 不同多播地址,什么含义?是代表我的主机曾经连接过这些主机,是吧
224.0.0.252 01-00-5e-00-00-fc 静态
239.255.255.250 01-00-5e-7f-ff-fa 静态
255.255.255.255 ff-ff-ff-ff-ff-ff 静态 # 为什么两个广播地址。

接口: 9.186.59.118 --- 0xd
Internet 地址 物理地址 类型
9.186.58.1 00-00-00-00-00-00 无效 # 网关
9.186.59.255 ff-ff-ff-ff-ff-ff 静态
224.0.0.22 01-00-5e-00-00-16 静态
224.0.0.251 01-00-5e-00-00-fb 静态
224.0.0.252 01-00-5e-00-00-fc 静态
239.255.255.250 01-00-5e-7f-ff-fa 静态
255.255.255.255 ff-ff-ff-ff-ff-ff 静态

接口: 0.0.0.0 --- 0xffffffff # 表示“本网络中的本机”
Internet 地址 物理地址 类型
224.0.0.22 01-00-5e-00-00-16 静态
224.0.0.251 01-00-5e-00-00-fb 静态
255.255.255.255 ff-ff-ff-ff-ff-ff 静态

接口: 192.168.191.1 --- 0x31
Internet 地址 物理地址 类型
192.168.191.2 d4-90-9c-57-ad-75 静态
192.168.191.255 ff-ff-ff-ff-ff-ff 静态
224.0.0.22 01-00-5e-00-00-16 静态
224.0.0.251 01-00-5e-00-00-fb 静态
224.0.0.252 01-00-5e-00-00-fc 静态
239.255.255.250 01-00-5e-7f-ff-fa 静态
255.255.255.255 ff-ff-ff-ff-ff-ff 静态

采用双向绑定的方法解决并且防止ARP欺骗

疑问

ARP协议:不知道局域网有多少IP,首先广播。在局域网里每个机子收到广播后,回复mac。拿到信息会有一个ARP表。

  • ARP表存在哪?
    每台设备都会维护一份ARP表。
  • 每台机器会维护全部表吗?会维护全表。